package io;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

/**
 * java将流按照读写单位划分为字节流与字符流
 * java.io.InputStream和OutputStream是所有字节流的超类
 * java.io.Reader和Writer是所有字符流的超类
 *
 * 字符流最小读写单位为char,即一个字符。但是底层本质还是读写字节，只是字符与字节的转换
 * 由字符流自行完成。因此:字符流仅适合读写文本数据!
 *
 *
 * 转换流
 * 转换流是一对高级流，实际开发中我们不会直接使用他们，但是在流链接中他们是重要的一环。
 * java.io.InputStreamReader和OutputStreamWriter
 *
 * 转换流的功能是用于衔接字节流与字符流的，因为其他的高级字符流都只能链接其他的字符流，不能
 * 直接链接字节流。转换流起到了"转换器"的作用。
 *
 */
public class OSWDemo {
    public static void main(String[] args) throws IOException {
        //向文件osw.txt中写入文本
        FileOutputStream fos = new FileOutputStream("./osw.txt");
        //创建转换流时可以指定字符集
        OutputStreamWriter osw = new OutputStreamWriter(fos,StandardCharsets.UTF_8);

        String line = "你叉叉，穷哈哈~哈利波特骑着扫帚飞~sorry~sorry";
        osw.write(line);
        osw.write("而我的扫帚却只能清理垃圾堆，什么是是快乐星球~");

        System.out.println("写出完毕!");

        osw.close();
    }
}
